package persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import modelo.TipoUsuario;
import modelo.Usuario;

public class UsuarioRepositorio extends EntidadeRepositorio<Usuario>
{
    public UsuarioRepositorio()
    {
    }
    
    UsuarioRepositorio(Connection conexao)
    {
        super(conexao);
    }
    
    @Override
    public void salvar(Usuario entidade)
    {
        try
        {
            EntidadeRepositorio er = new EnderecoRepositorio(conexao);
            
            er.salvar(entidade.getEndereco());
            
            String consulta =
                    "INSERT INTO USUARIO "
                    + "(CD_USUARIO,"
                    + "NM_USUARIO,"
                    + "NM_EMAIL_USUARIO,"
                    + "CD_TELEFONE_USUARIO,"
                    + "NM_LOGIN_USUARIO,"
                    + "NM_SENHA_USUARIO,"
                    + "NM_FANTASIA_USUARIO,"
                    + "CD_ENDERECO,"
                    + "CD_TIPO_USUARIO) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
            
            if (entidade.getCodigo() == null)
            {
                entidade.setCodigo(gerarCodigo());
            }

            PreparedStatement ps = conexao.prepareStatement(consulta);
            ps.setLong(1, entidade.getCodigo());
            ps.setString(2, entidade.getNome());
            ps.setString(3, entidade.getEmail());
            ps.setLong(4, entidade.getTelefone());
            ps.setString(5, entidade.getLogin());
            ps.setString(6, entidade.getSenha());
            ps.setString(7, entidade.getNomeFantasia());
            ps.setLong(8, entidade.getEndereco().getCodigo());
            ps.setLong(9, entidade.getTipo().getCodigo());
            
            ps.execute();
            ps.close();
        }
        catch (SQLException ex)
        {
            // LOGGAR EXCEÇÃO
        }
    }

    @Override
    public void atualizar(Usuario entidade)
    {
    }

    @Override
    public void deletar(Usuario entidade)
    {
    }

    @Override
    public Long gerarCodigo()
    {
        try
        {
            String consulta = "SELECT SQ_CD_USUARIO.NEXTVAL FROM DUAL";
            
            Statement s = conexao.createStatement();
            
            ResultSet rs = s.executeQuery(consulta);
            rs.next();
            
            return rs.getLong(1);
        }
        catch (SQLException ex)
        {
            // LOGGAR EXCEÇÃO
            
            return null;
        }
    }
    
    public Usuario encontrarPeloLoginSenha(String login, String senha)
    {
        return null;
    }
}